package pe.edu.sistemas.postgrado.samupg.view.controller;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ComponentSystemEvent;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import pe.edu.sistemas.postgrado.samupg.business.service.informacion.PublicacionService;
import pe.edu.sistemas.postgrado.samupg.business.service.marketing.ComentarioService;
import pe.edu.sistemas.postgrado.samupg.domain.model.Comentario;
import pe.edu.sistemas.postgrado.samupg.domain.model.Publicacion;
import pe.edu.sistemas.postgrado.samupg.domain.model.Usuario;

/**
 *
 * @author Marlon
 */
@ManagedBean
@Scope("view")
@Controller
public class ComentarioController {

    private boolean anonimo;
    private int idPublicacion;
    private String usuNombre;
    private Publicacion publicacion;
    private List<Comentario> listComentarios;
    private Usuario usuario;
    private Comentario comentario;
    @Resource
    private PublicacionService publicacionService;
    @Resource
    private ComentarioService comentarioService;

    /**
     * Creates a new instance of ComentarioController
     */
    public ComentarioController() {
        anonimo = false;
        comentario = new Comentario();
    }

    @PostConstruct
    public void init() {
        usuNombre = "";
        usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext()
                .getSessionMap().get("usuarioLogueado");

        if (usuario == null) {
            usuario = new Usuario();
        } else {
            usuNombre = usuario.getUsuNombres();
        }
    }

    public void registrarComentarioListener() {
        Date fecha = new Date();

        comentario.setAnonimo(anonimo);
        comentario.setComentarioFecha(fecha);
        comentario.setComentarioHora(fecha);
        comentario.setCorreo(usuario.getCorreos().get(0));
        comentario.setPublicacion(publicacion);

        comentarioService.crearComentario(comentario);
        comentario = new Comentario();
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Gracias por su comentario."));

        publicacion = publicacionService.getPublicacionxId(publicacion.getPublicacionId());
        listComentarios = publicacion.getComentarios();
    }

    public void preRenderPublicacionListener(ComponentSystemEvent cse) {
        publicacion = publicacionService.getPublicacionxId(idPublicacion);
        listComentarios = publicacion.getComentarios();
    }

    public void cambiarAnonimoListener(AjaxBehaviorEvent actionEvent) {
        usuNombre = (usuNombre.equals("anónimo")) ? usuario.getUsuNombres() : "anónimo";
    }

    public int getIdPublicacion() {
        return idPublicacion;
    }

    public void setIdPublicacion(int idPublicacion) {
        this.idPublicacion = idPublicacion;
    }

    public Publicacion getPublicacion() {
        return publicacion;
    }

    public void setPublicacion(Publicacion publicacion) {
        this.publicacion = publicacion;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public boolean isAnonimo() {
        return anonimo;
    }

    public void setAnonimo(boolean anonimo) {
        this.anonimo = anonimo;
    }

    public List<Comentario> getListComentarios() {
        return listComentarios;
    }

    public void setListComentarios(List<Comentario> listComentarios) {
        this.listComentarios = listComentarios;
    }

    public String getUsuNombre() {
        return usuNombre;
    }

    public void setUsuNombre(String usuNombre) {
        this.usuNombre = usuNombre;
    }

    public Comentario getComentario() {
        return comentario;
    }

    public void setComentario(Comentario comentario) {
        this.comentario = comentario;
    }
}
